package datos;

import java.io.Serializable;
import java.lang.String;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.persistence.*;
import org.eclipse.persistence.annotations.JoinFetch;
import static org.eclipse.persistence.annotations.JoinFetchType.INNER;

/**
 * @version 1.0
 * @author Andres Mejia -Fabio Giraldo
 * 
 * Entity implementation class for Entity: Subasta
 * 
 * @param identificacion llave primaria de la entidad.
 * @param fechaInicio hace referencia al dia en el que se inicio la subasta.
 * @param fechaFin hace refernecia al dia en el que se pondra fin la subasta.
 * @param precioBase Indica el valor en el que se dara inicio a la subasta.
 * @param tipoSubasta hace referencia al tipo de subasta que se empleara.
 * @param automovil hace referencia al automovil que va hacer subastado-
 * @param ofertas muestra todas de ofertas que se han hecho a la subasta.
 * @param usuario 
 *
 */
@Entity

public class Subasta implements Serializable {

	

	@Id
	@GeneratedValue
	private int identificacion;
	@ManyToOne
	private Fecha fechaInicio;
	@ManyToOne
	private Fecha fechaFin;
	
	private double precioBase;
	@ManyToOne
	TipoSubasta tipoSubasta;
	@ManyToOne 
	Automovil automovil;
	
	@OneToMany(mappedBy = "subasta")
	List<Oferta>ofertas;
	@ManyToOne
	Usuario usuario;
	
	
	private static final long serialVersionUID = 1L;


	/**
	 * Constructor de la clase 
	 **/  
	public Subasta() 
	{
		super();
	}   
	
	/**
	 * 
	 * @return identificacion devuelve la identificacion de una subasta.
	 */
	
	public int getIdentificacion() {
		return this.identificacion;
	}

	/**
	 * este metodo permite modificar la identificacion de una subasta.
	 * @param identificacion
	 */
	public void setIdentificacion(int identificacion) {
		this.identificacion = identificacion;
	}   
	
	/**
	 * 
	 * @return FechaInicio devuelve la fecha en la que se inicio la subasta.
	 */
	public Fecha getFechaInicio() {
		return this.fechaInicio;
	}

	/**
	 * este metodo asigna una fecha de inicio de la subasta.
	 * @param fechaInicio
	 */
	public void setFechaInicio(Fecha fechaInicio) {
		this.fechaInicio = fechaInicio;
	}   
	
	/**
	 * 
	 * @return fechaFin devuelve la fecha en la que se dara por terminada la subasta.
	 */
	public Fecha getFechaFin() {
		return this.fechaFin;
	}

	/**
	 * este metodo permite asignar una fecha final a la subasta.
	 * @param fechaFin
	 */
	public void setFechaFin(Fecha fechaFin) {
		this.fechaFin = fechaFin;
	}   
	
	/**
	 * 
	 * @return precioBase devuelve el valor inicial en el cual se dara inicio a la subasta.
	 */
	public double getPrecioBase() {
		return this.precioBase;
	}
	
	/**
	 * devuelve el valor del valor inicial de la subasta.
	 * @param precioBase
	 */

	public void setPrecioBase(double precioBase) {
		this.precioBase = precioBase;
	}
	
	/**
	 * 
	 * @return tipoSubasta devuelve el tipo a la que esta asignada una subasta.
	 */
	public TipoSubasta getTipoSubasta() {
		return tipoSubasta;
	}
	
	/**
	 * este metodo asigna un tipo de subasta a una subasta.
	 * @param tipoSubasta
	 */
	public void setTipoSubasta(TipoSubasta tipoSubasta) {
		this.tipoSubasta = tipoSubasta;
	}
	
	/**
	 * 
	 * @return automovil devuelve el automovil que sera subastado.
	 */
	public Automovil getAutomovil() {
		return automovil;
	}
	
	/**
	 * este metodo permite modificar el automovil que sera subastado.
	 * @param automovil
	 */
	public void setAutomovil(Automovil automovil) {
		this.automovil = automovil;
	}
	
	/**
	 * 
	 * @return usuario devuelve la lista de usuarios.
	 */
	public Usuario getUsuario() {
		return usuario;
	}
	
	/**
	 * este metodo permite asignar los usuarios a la subasta.
	 * @param usuarios
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	

   
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + identificacion;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Subasta other = (Subasta) obj;
		if (identificacion != other.identificacion)
			return false;
		return true;
	}
}
